//
//  CDH_GyroscopeViewController.swift
//  Transducer
//
//  Created by chendehao on 16/8/20.
//  Copyright © 2016年 CDHao. All rights reserved.
//

import UIKit
import CoreMotion

class CDH_GyroscopeViewController: UIViewController {


    // 显示是在 push 还是 pull 状态检查加速器
    @IBOutlet weak var gyroscopeModelLabel: UILabel!
    @IBOutlet weak var gyroscopeButton: UIButton!
    
    @IBOutlet weak var gyroscopeLabel: UILabel!
    @IBOutlet weak var pushOrPullSwitch: UISwitch!
    
    // 运动管理者
    lazy var manager : CMMotionManager = CMMotionManager()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        switchPushOrPull(pushOrPullSwitch)
    }
}
    extension CDH_GyroscopeViewController {
        // 实时检查还是
        @IBAction func switchPushOrPull(sender: UISwitch) {
            switch sender.on {
            case true:
                // 显示是在 push 方式下使用陀螺仪检查
                gyroscopeModelLabel.text = "getGyroscopePush"
                // 关闭陀螺仪检查
                gyroscopeButton.enabled = false
                // 采用 push 方式获取到陀螺仪
                getGyroscopePush()
                break
            case false:
                // 显示是在 pull 方式下使用陀螺仪检查
                gyroscopeModelLabel.text = "getGyroscopePull"
                // 开启加速器检查
                gyroscopeButton.enabled = true
                // 采用 pull 方式获取陀螺仪检查
                getGyroscopePull()
            }
        }
        // push 方式实时获取
        private func getGyroscopePush() {
            // 1.判断陀螺仪是否可用
            guard manager.gyroAvailable else {
                gyroscopeLabel.text = "陀螺仪不用"
                return
            }
            // 2.设置加速计获取数据的时间间隔
            manager.gyroUpdateInterval = 0.5
            
            // 3.开始采集数据
            manager.startGyroUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: {[weak self] (data : CMGyroData?, error : NSError?) in
                
                // 1.判断是否有错误
                if error != nil {
                    self!.gyroscopeLabel.text = "error: \(error!)"
                    return
                }
                
                // 2.获取加速级的数组
                guard let data = data else {
                    return
                }
                self!.gyroscopeLabel.text = "x: \(data.rotationRate.x), \ry: \(data.rotationRate.y), \rz: \(data.rotationRate.z)"
            })
        }
        // pull 方式需要时在使用陀螺仪开始采集
        private func getGyroscopePull() {
            // 1.判断陀螺仪是否可用
            guard manager.accelerometerAvailable else {
                gyroscopeLabel.text = "陀螺仪不用"
                return
            }
            // 2.开始采集数据
            manager.startGyroUpdates()
        }
        // 点击按钮时才开启陀螺仪检查
        @IBAction func gyroscopeButtonTouchDown(sender: UIButton) {
            // 1.获取 data
            guard let data = manager.gyroData else {
                return
            }
            
            // 2.获取 x/y/z轴方向上的陀螺仪的值
            gyroscopeLabel.text = "x: \(data.rotationRate.x), \ry: \(data.rotationRate.y), \rz: \(data.rotationRate.z)"
        }
        
}
